Skip to content

feat(DateTimePicker): use DateTimeHelper enhance IsEditable function - #8300

Merged
ArgoZhang merged 3 commits into
mainfrom
dev-dtm
Aug 6, 2026
Merged

feat(DateTimePicker): use DateTimeHelper enhance IsEditable function#8300
ArgoZhang merged 3 commits into
mainfrom
dev-dtm

Conversation

@ArgoZhang

@ArgoZhang ArgoZhang commented Aug 6, 2026

Copy link
Copy Markdown
Member

Link issues

fixes #8299

Summary By Copilot

Regression?

  • Yes
  • No

Risk

  • High
  • Medium
  • Low

Verification

  • Manual (required)
  • Automated

Packaging changes reviewed?

  • Yes
  • No
  • N/A

☑️ Self Check before Merge

⚠️ Please check all items below before review. ⚠️

  • Doc is updated/provided or not needed
  • Demo is updated/provided or not needed
  • Merge the latest code from the main branch

Summary by Sourcery

Introduce a reusable DateTimeHelper and update DateTimePicker to use it for parsing input values.

New Features:

  • Add a DateTimeHelper utility to parse various compact and separator-based date/time string formats into DateTime and DateTimeOffset values.

Enhancements:

  • Switch DateTimePicker string-to-date parsing to use the centralized DateTimeHelper for more flexible and consistent handling of user input.

Tests:

  • Add comprehensive unit tests covering DateTimeHelper parsing behaviors, edge cases, and DateTimeOffset handling.

@bb-auto bb-auto Bot added the enhancement New feature or request label Aug 6, 2026
@bb-auto bb-auto Bot added this to the v10.9.0 milestone Aug 6, 2026
@sourcery-ai

sourcery-ai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Reviewer's Guide

Refactors DateTime parsing in DateTimePicker to use a new shared DateTimeHelper utility that supports more input formats and adds dedicated unit tests for the helper, improving robustness when parsing editable user input and supporting both DateTime and DateTimeOffset scenarios.

Sequence diagram for DateTimePicker parsing flow with DateTimeHelper

sequenceDiagram
    actor User
    participant DateTimePicker
    participant DateTimeHelper

    User->>DateTimePicker: input value
    DateTimePicker->>DateTimePicker: TryParseValueFromString(value, out result, out validationErrorMessage)
    DateTimePicker->>DateTimeHelper: TryToDateTime(value, out val)
    DateTimeHelper-->>DateTimePicker: bool success, DateTime val
    alt [success]
        DateTimePicker->>DateTimePicker: cast val to TValue
    else [!success]
        DateTimePicker->>DateTimePicker: set validationErrorMessage
    end
Loading

File-Level Changes

Change Details Files
DateTimePicker now relies on a centralized helper for parsing user-entered date/time values instead of a single fixed format.
  • Replaces TryParseExact using DateTimeFormat/DateFormat with a call to DateTimeHelper.TryToDateTime when parsing the input string in TryParseValueFromString
  • Removes the direct dependency on System.Globalization from DateTimePicker.razor.cs
src/BootstrapBlazor/Components/DateTimePicker/DateTimePicker.razor.cs
Introduces a reusable DateTimeHelper utility to handle multiple date/time string formats and DateTimeOffset conversion.
  • Adds a static DateTimeHelper class with a list of supported compact formats and culture-invariant parsing logic
  • Implements ToDateTime overloads that return either nullable DateTime or a DateTime with a default fallback value
  • Implements TryToDateTime that first tries compact formats via TryParseExact, then falls back to general parsing, trimming whitespace and handling invalid/whitespace inputs
  • Implements ToDateTimeOffset that uses TryToDateTime and infers local offset for Unspecified kinds, otherwise constructing directly from the parsed DateTime
src/BootstrapBlazor/Utils/DateTimeHelper.cs
Adds unit tests to validate DateTimeHelper behavior across supported formats and edge cases.
  • Introduces DateTimeHelperTest using UnsafeAccessor to call internal static methods on DateTimeHelper
  • Covers success, null/default fallback, whitespace/invalid inputs, various compact formats, fallback standard formats, trimming behavior, and DateTimeOffset conversion with and without timezone info
test/UnitTest/Utils/DateTimeHelperTest.cs

Assessment against linked issues

Issue Objective Addressed Explanation
#8299 Enhance the DateTimePicker IsEditable behavior by improving how typed text input is parsed into a date/time value.

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@bb-auto bb-auto Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Auto approved by bb-auto

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've left some high level feedback:

  • Switching DateTimePicker.TryParseValueFromString to DateTimeHelper.TryToDateTime means the DateFormat/DateTimeFormat properties are no longer used for parsing, which may change behavior for consumers relying on custom formats; consider allowing the helper to accept explicit format strings or preserving the previous format-based path where appropriate.
  • The DateTimeHelper methods accept non-nullable string parameters but are tested and used with possible null values (e.g., via null! in tests); updating the signatures to string? and handling null explicitly at the API boundary would remove the need for suppressions and better reflect actual usage.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- Switching `DateTimePicker.TryParseValueFromString` to `DateTimeHelper.TryToDateTime` means the `DateFormat`/`DateTimeFormat` properties are no longer used for parsing, which may change behavior for consumers relying on custom formats; consider allowing the helper to accept explicit format strings or preserving the previous format-based path where appropriate.
- The `DateTimeHelper` methods accept non-nullable `string` parameters but are tested and used with possible null values (e.g., via `null!` in tests); updating the signatures to `string?` and handling null explicitly at the API boundary would remove the need for suppressions and better reflect actual usage.

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@ArgoZhang ArgoZhang changed the title feat(DateTimePicker): enhance IsEditable logic feat(DateTimePicker): use DateTimeHelper enhance IsEditable function Aug 6, 2026
@ArgoZhang
ArgoZhang merged commit 9af5aa3 into main Aug 6, 2026
5 checks passed
@ArgoZhang
ArgoZhang deleted the dev-dtm branch August 6, 2026 04:07
@codecov

codecov Bot commented Aug 6, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (f5c4231) to head (c756ac9).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #8300   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          769       770    +1     
  Lines        34477     34509   +32     
=========================================
+ Hits         34477     34509   +32     
Flag Coverage Δ
BB 100.00% <100.00%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(DateTimePicker): enhance IsEditable logic

1 participant